package org.japo.java.swing.igu;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import org.japo.java.swing.beans.PanelFondo;
import org.japo.java.swing.listeners.GEA;
import org.japo.java.swing.listeners.GEC;
import org.japo.java.swing.listeners.GECP;
import org.japo.java.swing.listeners.GER;
import org.japo.java.swing.listeners.GET;
import org.japo.java.swing.listeners.GEV;

public class IGU extends JFrame {
    
    //Fichero de bloqueo
    private final String F_BLOQUEO = "instancia.lck";

    private JLabel lblPrueba;
    private JTextField txfPrueba;
    private JButton btnPrueba;
    private JCheckBox cbxPrueba;
    private JComboBox cbbPrueba;
    private JSlider sldPrueba;
    private JSpinner spnPrueba;
    private JRadioButton rbtPrueba1;
    private JRadioButton rbtPrueba2;

    //FUENTE
    private final String FNT_FAM = "Calibri";
    private final int FNT_EST = Font.PLAIN;
    private final int FNT_TAM = 15;

    Font f = new Font(FNT_FAM, FNT_EST, FNT_TAM);

    //DIMENSIONES
    Dimension dim = new Dimension(80, 60);

    // Recurso con la imagen de forndo del panel
    private final String RES_PKG = "/org/japo/java/resources/img";
    private final String RES_IMG = "fondo.jpg";
    private final String RECURSO = RES_PKG + "/" + RES_IMG;

    public IGU() throws HeadlessException {
        iniciarComponentes();
    }

    private void iniciarComponentes() {
        GEA gea = new GEA(this);
//        GECP gecp = new GECP(this);
//        GEC gec = new GEC(this);
//        GER ger = new GER(this);
        GET get = new GET(this);
        GEV gev = new GEV(this);

        // Borde principal
        Border brdPrincipal = new EmptyBorder(10, 10, 10, 10);
//        Border border = LineBorder.createGrayLineBorder();
        Border border = new BevelBorder(BevelBorder.RAISED);

        URL urlImagen = getClass().getResource(RECURSO);
        Image i = new ImageIcon(urlImagen).getImage();

        //Panel Principal
        JPanel pnlPrincipal = new PanelFondo(i);
        pnlPrincipal.setLayout(new GridLayout(8, 1));
        pnlPrincipal.setBorder(brdPrincipal);

        //Un panel para cada componente
        JPanel pnl1 = new JPanel();
        JPanel pnl2 = new JPanel();
        JPanel pnl3 = new JPanel();
        JPanel pnl4 = new JPanel();
        JPanel pnl5 = new JPanel();
        JPanel pnl6 = new JPanel();
        JPanel pnl7 = new JPanel();
        JPanel pnl8 = new JPanel();

        //JLABEL en PANEL1
        lblPrueba = new JLabel("LABEL");
        lblPrueba.setPreferredSize(dim);
        lblPrueba.setBackground(Color.BLUE);
        lblPrueba.setBorder(border);
        lblPrueba.setOpaque(false);
        pnl1.setOpaque(false);
        pnl1.add(lblPrueba);
        pnlPrincipal.add(pnl1);

        //JTEXTFIELD EN PANEL2
        txfPrueba = new JTextField("TEXTFIELD");
        txfPrueba.setLocation(110, 40);
        txfPrueba.setSize(dim);
        txfPrueba.setFont(f);
//        txfPrueba.addActionListener(gea);
        pnl2.setOpaque(false);
        pnl2.add(txfPrueba);
        pnlPrincipal.add(pnl2);

        //JBUTTON EN PANEL3
        btnPrueba = new JButton();
        btnPrueba.setText("Aceptar");
        btnPrueba.setSize(dim);
        btnPrueba.setLocation(30, 145);
        btnPrueba.addActionListener(gea);
        btnPrueba.addKeyListener(get);
        pnl3.setOpaque(false);
        pnl3.add(btnPrueba);
        pnlPrincipal.add(pnl3);

        //JCHECKBOX EN PANEL4
        cbxPrueba = new JCheckBox("Negrita");
//        cbxPrueba.addActionListener(gea);
        cbxPrueba.setPreferredSize(dim);
        cbxPrueba.setOpaque(false);
        pnl4.setOpaque(false);
        pnl4.add(cbxPrueba);
        pnlPrincipal.add(pnl4);

        //JCOMBOBOX EN PANEL5
        //Lista de colores
        String[] listaColores = {"Rojo", "Azul", "Amarillo", "Verde", "Cian", "Negro"};
        cbbPrueba = new JComboBox(listaColores);
        cbbPrueba.setPreferredSize(dim);
        cbbPrueba.setFont(f);
        cbbPrueba.setBorder(border);
//        cbbPrueba.setLocation(100, 100);
//        cbbPrueba.addActionListener(gea);
        pnl5.setOpaque(false);
        pnl5.add(cbbPrueba);
        pnlPrincipal.add(pnl5);

        //JSLIDER EN PANEL6
        int MINIMO_SLIDER = 0;
        int MAXIMO_SLIDER = 250;
        int INICIO_SLIDER = 130;
        int PASO_MENOR = 10;
        int PASO_MAYOR = 50;
        sldPrueba = new JSlider();
        sldPrueba.setMinimum(MINIMO_SLIDER);
        sldPrueba.setMaximum(MAXIMO_SLIDER);
        sldPrueba.setValue(INICIO_SLIDER);
        sldPrueba.setFont(f);
        sldPrueba.setPaintLabels(true);
        sldPrueba.setPaintTicks(true);
        sldPrueba.setMinorTickSpacing(PASO_MENOR);
        sldPrueba.setMajorTickSpacing(PASO_MAYOR);
//        sldPrueba.addChangeListener(gec);
        sldPrueba.setOpaque(false);
        sldPrueba.setSize(dim);
        sldPrueba.setLocation(10, 10);
        pnl6.setOpaque(false);
        pnl6.add(sldPrueba);
        pnlPrincipal.add(pnl6);

        //JSPINNER EN PANEL7
        int MINIMO_SPINNER = 0;
        int MAXIMO_SPINNER = 220;
        int INICIO_SPINNER = 130;
        SpinnerNumberModel modeloSpinner = new SpinnerNumberModel();
        modeloSpinner.setMinimum(MINIMO_SPINNER);
        modeloSpinner.setMaximum(MAXIMO_SPINNER);
        modeloSpinner.setValue(INICIO_SPINNER);
        spnPrueba = new JSpinner();
        spnPrueba.setModel(modeloSpinner);
//        spnPrueba.addChangeListener(gec);
        pnl7.setOpaque(false);
        pnl7.add(spnPrueba);
        pnlPrincipal.add(pnl7);

        //RADIOBUTTON EN PANEL8
        rbtPrueba1 = new JRadioButton();
        rbtPrueba1.setPreferredSize(dim);
        rbtPrueba1.setText("FONDO");
        rbtPrueba1.setFont(f);
        rbtPrueba1.setLocation(10, 100);
//        rbtPrueba1.addActionListener(gea);
        pnl8.add(rbtPrueba1);

        rbtPrueba2 = new JRadioButton();
        rbtPrueba2.setPreferredSize(dim);
        rbtPrueba2.setText("FONDO");
        rbtPrueba2.setFont(f);
        rbtPrueba2.setLocation(10, 100);
//        rbtPrueba2.addActionListener(gea);
        pnl8.setOpaque(false);
        pnl8.add(rbtPrueba2);
        //Grupo Radiobuttons
        ButtonGroup bg = new ButtonGroup();
        bg.add(rbtPrueba1);
        bg.add(rbtPrueba2);
        pnlPrincipal.add(pnl8);

        // Ventana principal
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("TodoMezcladoTema5");
        setContentPane(pnlPrincipal);
        setResizable(true);
        setSize(800, 210);
        setLocationRelativeTo(null);

    }

    public void respuestaBoton() {
//        if (btnPrueba.hasFocus()) {
        JOptionPane.showMessageDialog(btnPrueba, "Prueba correcta");
//        }

    }
    
    public void activarInstancia() throws IOException {
        //Crea un objeto File a partie del nombre del fichero 
        File f = new File(F_BLOQUEO);
        
        //Comprueba si el ficher fisico existe o no
        boolean existeOk = f.exists();
        
        //Tramita el resultado de la comprobacion
        if (!existeOk) {
            f.createNewFile();
        } else {
            throw new IOException("Ya existe una copia en ejecucion");
        }
    }
    
    public void desactivarInstancia() throws IOException {
        File f = new File(F_BLOQUEO);
        
        boolean existeOk = f.exists();
        if (existeOk) {
            f.delete();
        } else {
            throw new IOException("Hay un problema en la anulacion del bloqueo");
        }
    }
    
    
    public void terminarPrograma() {
        //Oculta la ventana 
        setVisible(false);
        
        //Libera recursos graficos
        dispose();
        
        //Termina el hilo principal
        System.exit(0);
    }

}
